package com.clp.protocol.iec104.connect;

import com.clp.protocol.iec104.apdu.Apdu;
import com.clp.protocol.iec104.exception.IncorrectRtuAddrException;
import com.clp.protocol.iec104.exception.IncorrectSeqException;

import java.util.concurrent.ScheduledExecutorService;

/**
 * 连接信息，提供一组Api用来查看当前连接相关信息
 */
public interface ConnInfo {
    /**
     * 定时任务执行器
     * @return
     */
    ScheduledExecutorService scheduledExecutor();

    /**
     * 是否已连接
     * @return
     */
    boolean isConnected();

    /**
     * 远程IP
     * @return
     */
    String remoteHost();

    /**
     * 远程端口号
     * @return
     */
    int remotePort();

    /**
     * 公共地址
     * @return
     */
    int rtuAddr();

    /**
     * 当前发送序号
     * @return
     */
    int sendSeq();

    /**
     * 当前接收序号
     * @return
     */
    int recvSeq();

    /**
     * 当前已经接收到未发送S帧确认的I帧数
     * @return
     */
    int currRecvCount();

    /**
     * 检查接收到的Apdu的公共地址是否匹配/正确
     * @param apdu
     * @return
     */
    void checkRecvApduRtuAddr(Apdu apdu) throws IncorrectRtuAddrException;

    /**
     * 检查接收到的Apdu是否失序
     * @param apdu
     * @return
     */
    void checkRecvApduSeq(Apdu apdu) throws IncorrectSeqException;
}
